特殊的线性表–栈和队列
1.栈:插入和删除操作只允许在线性表的一端进行。(栈是操作系统实现嵌套调用机制的基础)
栈顶 | 允许操作的一端 |
栈底 | 不允许操作的一端 |
入栈(push) | 往栈中插入元素 |
出栈(pop) | 删除栈中元素 |
栈顶元素(peek) | 返回栈顶元素(未出栈) |
注:顺序栈–入出栈采用尾插入、删除,时间复杂度为O(1),自动扩充容量时入栈为O(n);
链式栈–入出栈采用头插入、删除,时间复杂度为O(1)
2.使用栈计算算术表达式的值
思路:利用栈的特性将中缀表达式转换成后缀表达式
package Stack;
import java.util.Stack;
public class Expression {
public static StringBuffer toPostfix(String infix) {
stack <String>stack=new SeqStack<String>(infix.length());
StringBuffer postfix=new StringBuffer(infix.length()*2);
System.out.println(253);
int i=0;
while(i<infix.length()) {
char ch=infix.charAt(i);
switch(ch) {
case'+':
case'-': //只有栈空或栈顶为“(”时入栈
while(!stack.isEmpty()&&!stack.peek().equals("("))
postfix.append(stack.pop());
stack.push(ch+"");
i++;
break;
case'*':
case'/': //栈空或栈顶不为“*”“/”时入栈
while(!stack.isEmpty()&&(stack.peek().equals(<